package com.example;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

// 这是第二个作业使用的Servlet，用于从数据库中查询学生信息
// 定义一个处理学生信息的Servlet，从数据库中查询学生信息
public class StudentDBServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置响应内容类型为UTF-8，以支持中文字符
        response.setContentType("text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        // 获取请求参数中的学生姓名
        String studentName = request.getParameter("name");

        // 检查请求参数是否为空
        if (studentName == null || studentName.isEmpty()) {
            // 如果请求参数为空，提示用户如何正确输入
            PrintWriter out = response.getWriter();
            out.println("请在URL中这样输入: http://localhost:8080/your-app-context/studentdb?name=张三");
            return;
        }

        // 查询数据库
        try (Connection conn = DBConnection.getConnection();  // 获取数据库连接
             PreparedStatement stmt = conn.prepareStatement("SELECT * FROM students WHERE name = ?")) {  // 准备SQL查询语句

            stmt.setString(1, studentName);  // 设置查询参数
            ResultSet rs = stmt.executeQuery();  // 执行查询

            PrintWriter out = response.getWriter();
            if (rs.next()) {  // 如果查询结果不为空
                out.println("<h1>学生信息：</h1>");
                out.println("<p>名字: " + rs.getString("name") + "</p>");  // 输出学生名字
                out.println("<p>年龄: " + rs.getInt("age") + "</p>");  // 输出学生年龄
                out.println("<p>专业: " + rs.getString("major") + "</p>");  // 输出学生专业
            } else {
                out.println("没有发现该学生：" + studentName);  // 如果未找到学生，输出提示信息
            }
        } catch (SQLException e) {
            PrintWriter out = response.getWriter();
            out.println("数据库错误: " + e.getMessage());  // 处理数据库异常并输出错误信息
        }
    }
}
